REM > !RunImage
REM An execution scheduler.
REM  Carl Elkins & 3SL Ltd.
REM   November 1991

ON ERROR ERROR 0,"Internal error type "+STR$ ERL+"  : "+REPORT$ :END

DIM t 256
PROCcheckFile

END

DEF PROCcheckFile
LOCAL C%,A$,L$,mm$,hh$,dm$,my$,dw$

A$=FNtime
mm$=LEFT$(A$,2)
A$=MID$(A$,3)
hh$=LEFT$(A$,2)
A$=MID$(A$,3)
dm$=LEFT$(A$,2)
A$=MID$(A$,3)
my$=LEFT$(A$,2)
A$=MID$(A$,3)
dw$=LEFT$(A$,1)

C%=OPENIN("<Cron$Dir>.CronTab")
IF C%=0 THEN ERROR 0,"CronTab file not found."
WHILE NOT EOF#C%
  REPEAT
    A$=GET$#C%
    WHILE LEFT$(A$,1)=" "
      A$=MID$(A$,2)
    ENDWHILE
  UNTIL (LEFT$(A$,1)<>"#") OR (EOF#C%)
  IF A$<>"" THEN
    L$=A$
    IF FNmatch(mm$,hh$,dm$,my$,dw$,L$) AND (L$<>"") THEN SYS "Wimp_StartTask",L$
    IF L$="" THEN
      q%!0=255
      $(q%+4)="Bad line format in CronTab file '"+A$+"'"+CHR$(0)
      SYS "Wimp_ReportError",q%,%1,"Cron Utility"
    ENDIF
  ENDIF
ENDWHILE
CLOSE#C%

ENDPROC


DEF FNmatch(min$,hr$,dm$,my$,dow$,RETURN L$)
LOCAL A$

A$=FNnext(L$)
IF (A$=min$) OR (A$="*") THEN
  A$=FNnext(L$)
  IF (A$=hr$) OR (A$="*") THEN
    A$=FNnext(L$)
    IF (A$=dm$) OR (A$="*") THEN
      A$=FNnext(L$)
      IF (A$=my$) OR (A$="*") THEN
        A$=FNnext(L$)
        IF (A$=dow$) OR (A$="*") THEN = TRUE
      ENDIF
    ENDIF
  ENDIF
ENDIF

= FALSE


DEF FNnext(RETURN L$)
LOCAL A$,B$

B$=""
REPEAT
  A$=LEFT$(L$,1)
  L$=MID$(L$,2)
  IF A$<>" " THEN B$+=A$
UNTIL ((A$=" ") AND (LEN(B$)>0)) OR (L$="")

=B$



DEF FNtime
LOCAL R1

t?0=3
SYS "OS_Word",14,t
SYS "OS_ConvertDateAndTime",t,t,16,"%MI%24%DY%MN%WN%0"+CHR$(0) TO ,R1
R1?0=13
=$t

